home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Rozne / HTTrack 3.40-2 / httrack-3.40-2.exe / {app} / src_win / WinHTTrack / HTTrackInterface.h < prev    next >
C/C++ Source or Header  |  2005-11-04  |  6KB  |  197 lines

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. #include "httrack-library.h"
  7. /**/
  8. #include "htsglobal.h"
  9. #include "htsbase.h"
  10. #include "htsopt.h"
  11.  
  12. extern int linput(FILE* fp,char* s,int max);
  13. extern int linput_trim(FILE* fp,char* s,int max);
  14. extern int linput_cpp(FILE* fp,char* s,int max);
  15. extern void rawlinput(FILE* fp,char* s,int max);
  16. extern int binput(char* buff,char* s,int max);
  17. extern int fexist(char* s);
  18. extern INTsys fsize(char* s);
  19. extern TStamp time_local(void);
  20.  
  21. extern char* concat(const char* a,const char* b);
  22. extern char* __fconv(char* a);
  23. extern char* fconcat(char* a,char* b);
  24. extern char* fconv(char* a);
  25. extern char* __fslash(char* a);
  26. extern char* fslash(char* a);
  27. extern char* convtolower(char* a);
  28. extern void hts_lowcase(char* s);
  29.  
  30. extern char* next_token(char* p,int flag);
  31.  
  32. // Engine internal variables
  33. typedef void (* htsErrorCallback)(char* msg, char* file, int line);
  34. extern HTSEXT_API htsErrorCallback htsCallbackErr;
  35. extern HTSEXT_API int htsMemoryFastXfr;
  36. /* */
  37. extern HTSEXT_API hts_stat_struct HTS_STAT;
  38. extern int _DEBUG_HEAD;
  39. extern FILE* ioinfo;
  40.  
  41.  
  42.  
  43.  
  44. // from htsbase.h
  45.  
  46. /* protected strcat, strncat and strcpy - definitely useful */
  47. #define strcatbuff(A, B) do { \
  48.   assertf( (A) != NULL ); \
  49.   if ( ! (B) ) { assertf( 0 ); } \
  50.   if (htsMemoryFastXfr) { \
  51.     if (sizeof(A) != sizeof(char*)) { \
  52.       (A)[sizeof(A) - 1] = '\0'; \
  53.     } \
  54.     strcat(A, B); \
  55.     if (sizeof(A) != sizeof(char*)) { \
  56.       assertf((A)[sizeof(A) - 1] == '\0'); \
  57.     } \
  58.   } else { \
  59.     unsigned int sz = (unsigned int) strlen(A); \
  60.     unsigned int szf = (unsigned int) strlen(B); \
  61.     if (sizeof(A) != sizeof(char*)) { \
  62.       assertf(sz + szf + 1 < sizeof(A)); \
  63.       if (szf > 0) { \
  64.         if (sz + szf + 1 < sizeof(A)) { \
  65.           memcpy((A) + sz, (B), szf + 1); \
  66.         } \
  67.       } \
  68.     } else if (szf > 0) { \
  69.       memcpybuff((A) + sz, (B), szf + 1); \
  70.     } \
  71.   } \
  72. } while(0)
  73. #define strncatbuff(A, B, N) do { \
  74.   assertf( (A) != NULL ); \
  75.   if ( ! (B) ) { assertf( 0 ); } \
  76.   if (htsMemoryFastXfr) { \
  77.     if (sizeof(A) != sizeof(char*)) { \
  78.       (A)[sizeof(A) - 1] = '\0'; \
  79.     } \
  80.     strncat(A, B, N); \
  81.     if (sizeof(A) != sizeof(char*)) { \
  82.       assertf((A)[sizeof(A) - 1] == '\0'); \
  83.     } \
  84.   } else { \
  85.     unsigned int sz = (unsigned int) strlen(A); \
  86.     unsigned int szf = (unsigned int) strlen(B); \
  87.     if (szf > (unsigned int) (N)) szf = (unsigned int) (N); \
  88.     if (sizeof(A) != sizeof(char*)) { \
  89.       assertf(sz + szf + 1 < sizeof(A)); \
  90.       if (szf > 0) { \
  91.         if (sz + szf + 1 < sizeof(A)) { \
  92.           memcpy((A) + sz, (B), szf); \
  93.           * ( (A) + sz + szf) = '\0'; \
  94.         } \
  95.       } \
  96.     } else if (szf > 0) { \
  97.       memcpybuff((A) + sz, (B), szf); \
  98.       * ( (A) + sz + szf) = '\0'; \
  99.     } \
  100.   } \
  101. } while(0)
  102. #define strcpybuff(A, B) do { \
  103.   assertf( (A) != NULL ); \
  104.   if ( ! (B) ) { assertf( 0 ); } \
  105.   if (htsMemoryFastXfr) { \
  106.     if (sizeof(A) != sizeof(char*)) { \
  107.       (A)[sizeof(A) - 1] = '\0'; \
  108.     } \
  109.     strcpy(A, B); \
  110.     if (sizeof(A) != sizeof(char*)) { \
  111.       assertf((A)[sizeof(A) - 1] == '\0'); \
  112.     } \
  113.   } else { \
  114.     unsigned int szf = (unsigned int) strlen(B); \
  115.     if (sizeof(A) != sizeof(char*)) { \
  116.       assertf(szf + 1 < sizeof(A)); \
  117.       if (szf > 0) { \
  118.         if (szf + 1 < sizeof(A)) { \
  119.           memcpy((A), (B), szf + 1); \
  120.         } else { \
  121.           * (A) = '\0'; \
  122.         } \
  123.       } else { \
  124.         * (A) = '\0'; \
  125.       } \
  126.     } else { \
  127.       memcpybuff((A), (B), szf + 1); \
  128.     } \
  129.   } \
  130. } while(0)
  131.  
  132.  
  133. // emergency log
  134. typedef void (*t_abortLog)(char* msg, char* file, int line);
  135. extern HTSEXT_API t_abortLog abortLog__;
  136. #define abortLog(a) abortLog__(a, __FILE__, __LINE__)
  137. #define abortLogFmt(a) do { \
  138.   FILE* fp = fopen("CRASH.TXT", "wb"); \
  139.   if (!fp) fp = fopen("/tmp/CRASH.TXT", "wb"); \
  140.   if (!fp) fp = fopen("C:\\CRASH.TXT", "wb"); \
  141.   if (fp) { \
  142.     fprintf(fp, "HTTrack " HTTRACK_VERSIONID " closed at '" __FILE__ "', line %d\r\n", __LINE__); \
  143.     fprintf(fp, "Reason:\r\n"); \
  144.     fprintf(fp, a); \
  145.     fprintf(fp, "\r\n"); \
  146.     fflush(fp); \
  147.     fclose(fp); \
  148.   } \
  149. } while(0)
  150.  
  151. #define _ ,
  152. #define abortLogFmt(a) do { \
  153.   FILE* fp = fopen("CRASH.TXT", "wb"); \
  154.   if (!fp) fp = fopen("/tmp/CRASH.TXT", "wb"); \
  155.   if (!fp) fp = fopen("C:\\CRASH.TXT", "wb"); \
  156.   if (fp) { \
  157.     fprintf(fp, "HTTrack " HTTRACK_VERSIONID " closed at '" __FILE__ "', line %d\r\n", __LINE__); \
  158.     fprintf(fp, "Reason:\r\n"); \
  159.     fprintf(fp, a); \
  160.     fprintf(fp, "\r\n"); \
  161.     fflush(fp); \
  162.     fclose(fp); \
  163.   } \
  164. } while(0)
  165. #define assertf(exp) do { \
  166.   if (! ( exp ) ) { \
  167.     abortLog("assert failed: " #exp); \
  168.     if (htsCallbackErr != NULL) { \
  169.       htsCallbackErr("assert failed: " #exp, __FILE__ , __LINE__ ); \
  170.     } \
  171.     assert(exp); \
  172.     abort(); \
  173.   } \
  174. } while(0)
  175. /* non-fatal assert */
  176. #define assertnf(exp) do { \
  177.   if (! ( exp ) ) { \
  178.     abortLog("assert failed: " #exp); \
  179.     if (htsCallbackErr != NULL) { \
  180.       htsCallbackErr("assert failed: " #exp, __FILE__ , __LINE__ ); \
  181.     } \
  182.   } \
  183. } while(0)
  184.  
  185. //
  186.  
  187. #define malloct(A)          malloc(A)
  188. #define calloct(A,B)        calloc((A), (B))
  189. #define freet(A)            do { assertnf((A) != NULL); if ((A) != NULL) { free(A); (A) = NULL; } } while(0)
  190. #define strdupt(A)          strdup(A)
  191. #define realloct(A,B)       ( ((A) != NULL) ? realloc((A), (B)) : malloc(B) )
  192. #define memcpybuff(A, B, N) memcpy((A), (B), (N))
  193.  
  194.  
  195. // various
  196. #define copychar(a) concat((a),NULL)
  197.